﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CANO.Data.DAOs
{
	public class NotificationDAO
	{
		public int NotificationID { get; set; }
		public int RemitenteID { get; set; }
		public string RemitenteDisplay { get; set; }
		public int DestinatarioID { get; set; }
		public string DestinatarioDisplay { get; set; }
		public string Mensaje { get; set; }
		public DateTime FechaHora { get; set; }

		public void Insert(int Remitente, int Destinatario)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				context.Notificacions.InsertOnSubmit(new Notificacion() { 
					Remitente = Remitente,
					Destinatario = Destinatario,
					Mensaje = Mensaje,
					Fecha = DateTime.Now
				}
				);
				context.SubmitChanges();
			}
		}

		public List<NotificationDAO> GetAllByUser(int User)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				List<NotificationDAO> notificationList = new List<NotificationDAO>();

				var notification =(
					from n in context.Notificacions
					where n.Destinatario == User
					orderby n.Fecha descending
					select n).Take(1000); //Validar que tome 1000

				foreach (var notificacionItem in notification)
				{
					NotificationDAO notificacionDAO = new NotificationDAO();

					FillDAO(notificacionDAO, notificacionItem);
					notificationList.Add(notificacionDAO);
				}
				return notificationList;
			}
		}

		private void FillDAO(NotificationDAO notificacionDAO, Notificacion notificacion)
		{
			notificacionDAO.NotificationID = notificacion.NotificationID;
			notificacionDAO.DestinatarioID = notificacion.Destinatario;
			notificacionDAO.DestinatarioDisplay = new UsuarioDAO().GetNameByID(notificacion.Destinatario);
			notificacionDAO.FechaHora = notificacion.Fecha.Date;
			notificacionDAO.Mensaje = notificacion.Mensaje;
			notificacionDAO.RemitenteID = notificacion.Remitente.Value;
			notificacionDAO.RemitenteDisplay = new UsuarioDAO().GetNameByID(notificacion.Remitente.Value);
		}

		public NotificationDAO GetNotificationByID(int NotificacionID)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				var notification =
					from n in context.Notificacions
					where n.NotificationID == NotificacionID
					select n;

				NotificationDAO notiRet = new NotificationDAO();
				FillDAO(notiRet, notification.SingleOrDefault());
				return notiRet;
			}
		}
	}
}